package router

import (
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"go-devops/common"
	"go-devops/handler"
)

func NewRouter() *gin.Engine {
	r := gin.Default()

	corsConfig := cors.DefaultConfig()
	corsConfig.AllowAllOrigins = true

	r.Use(cors.New(corsConfig))
	r.Use(AuthHandler())
	r.Use(GlobalExceptionHandler)

	// 配置路由
	r.NoRoute(func(c *gin.Context) {
		common.Fail(c, common.ErrPath)
	})
	authGroup := r.Group("/auth")
	{
		authGroup.POST("/login", handler.Login)
		authGroup.POST("/logout", handler.Logout)
	}

	task := r.Group("/task")
	{
		task.GET("/taskNamespaceList", handler.TaskNamespaceList)
		task.POST("/addNamespace", handler.AddTaskNamespace)
		task.DELETE("/deleteNamespace", handler.DeleteNamespace)
		task.POST("/taskList", handler.TaskList)
		task.POST("/addTask", handler.AddTask)
		task.POST("/deleteTask", handler.DeleteTask)
		task.GET("/taskInfo", handler.TaskInfo)
		task.POST("/saveFlowData", handler.SaveFlowData)
		task.POST("/updateTaskData", handler.UpdateTaskData)
		task.GET("/runTask", handler.RunTask)
		task.GET("/stopTask", handler.StopTask)
		task.POST("/hisList", handler.HisList)
		task.GET("/hisLog", handler.HisLog)
		task.GET("/branchList", handler.BranchList)
		task.POST("/saveTemplate", handler.SaveTemplate)
		task.DELETE("/deleteTemplate", handler.DeleteTemplate)
		task.GET("/templateList", handler.TemplateList)
	}

	user := r.Group("/user")
	{
		user.GET("/userList", handler.UserList)
		user.POST("/addUser", handler.AddUser)
	}

	secret := r.Group("/secret")
	{
		secret.GET("/getSecretList", handler.GetSecretList)
		secret.POST("/addSecret", handler.AddSecret)
		secret.DELETE("/deleteSecret", handler.DeleteSecret)
	}

	node := r.Group("/node")
	{
		node.GET("/imageList", handler.ImageList)
		node.POST("/addImage", handler.AddImage)
	}

	// sse处理
	sseGroup := r.Group("/sse")
	{
		sseGroup.GET("/conn", handler.ConnSSE)
		sseGroup.GET("/close", handler.CloseSSE)
	}

	return r
}
